package org.yeruyi.common.inter;

import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Bundle;

/**
 * Author：yeruyi
 * Date：2017/06/07
 * Version：v1.4
 * Note：
 * 2017年03月12日 原始封装
 * 2017年05月21日 增加startActivityForResult的处理接口
 * 2017年06月07日 增加服务和广播注册接口
 * 2017年11月21日 增加消息编辑弹窗
 */

public interface RoyBaseView {

    /**
     * Show the toast
     *
     * @param msg msg
     */
    void showToast(String msg);

    /**
     * Show the processDialog
     */
    boolean showProcessDialog(String msg);

    /**
     * Cancel to show the processDialog
     */
    boolean dismissProcessDialog();

    /**
     * Get context
     *
     * @return context
     */
    Context getActivityContext();

    /**
     * Finish Activity
     */
    void finishActivity();

    /**
     * Finish activity with DATA
     *
     * @param result the resultCode
     * @param intent the resultData
     */
    void finishActivityWithResultIntent(int result, Intent intent);

    /**
     * Finish activity with CODE
     *
     * @param result result code
     */
    void finishActivityWithResult(int result);

    /**
     * The method to startActivity extends RoyBaseActivity.
     *
     * @param intent      intent
     * @param requestCode the code of request
     */
    void skipActivityForResult(Intent intent, int requestCode);

    /**
     * Skip activity with intent
     *
     * @param intent     intent
     * @param isFinished finished
     */
    void skipActivityWithIntent(Intent intent, boolean isFinished);

    /**
     * Register receiver
     *
     * @param receiver
     * @param intentFilter
     */
    void registerReceiverFromPresenter(BroadcastReceiver receiver, IntentFilter intentFilter);

    /**
     * Unregister receiver
     *
     * @param receiver
     */
    void unregisterReceiverFromPresenter(BroadcastReceiver receiver);

    /**
     * Bind service
     *
     * @param serviceConnection
     * @param intent
     */
    void bindServiceFromPresenter(ServiceConnection serviceConnection, Intent intent);

    /**
     * UnBind service
     *
     * @param serviceConnection
     */
    void unbindServiceFromPrsenter(ServiceConnection serviceConnection);

    /**
     * 显示消息弹窗
     *
     * @param msg              主信息
     * @param poText           确定按钮文字
     * @param negaText         取消按钮文字
     * @param positiveListener 确定事件监听
     * @param negativeListener 取消事件监听
     * @return 执行是否成功
     */
    boolean showMsgDialog(String msg, String poText, String negaText, DialogInterface.OnClickListener positiveListener, DialogInterface.OnClickListener negativeListener);

    /**
     * 关闭消息弹窗
     *
     * @return 执行是否成功
     */
    boolean dismissMsgDialog();

    /**
     * 显示编辑弹窗
     *
     * @param title       标题
     * @param ediTextHint 编辑文本默认显示字
     * @param confirm     确定按钮
     * @param cancel      取消按钮
     * @return 执行是否成功
     */
    boolean showEditDialog(String title, String ediTextHint, DialogInterface.OnClickListener confirm, DialogInterface.OnClickListener cancel);

    /**
     * 关闭编辑弹窗
     *
     * @return 执行成功与否
     */
    boolean dismissEditDialog();

    /**
     * 请求申请权限
     *
     * @param permission 申请权限列表
     */
    void reqGrantedPermission(String[] permission);

    /**
     * 发送消息交给application处理
     *
     * @param what msg.what
     */
    void sendMessage2Application(int what);


    /**
     * 发送消息交给application处理
     *
     * @param what      msg.what
     * @param extraData msg.data
     */
    void sendMessage2Application(int what, Bundle extraData);

    /**
     * 发送消息交给application处理
     *
     * @param what msg.what
     * @param arg1 msg.arg1
     * @param arg2 msg.arg2
     */
    void sendMessage2Application(int what, int arg1, int arg2);

    /**
     * 发送消息交给application处理
     *
     * @param what      msg.what
     * @param arg1      msg.arg1
     * @param arg2      msg.arg2
     * @param extraData msg.data
     */
    void sendMessage2Application(int what, int arg1, int arg2, Bundle extraData);


    /**
     * 获取Application对象
     *
     * @return application
     */
    Application doGetApplication();


}
